From 90522d3b361ca2e3c424cc76afad22926377e53f Mon Sep 17 00:00:00 2001 From: "vh249@arcadians.cl.cam.ac.uk" Date: Tue, 5 Apr 2005 10:11:54 +0000 Subject: [PATCH] bitkeeper revision 1.1236.57.2 (4252646a-w2lxhow-zRG4FwNSoDk5A) add support for memory suffix in user tools and in kernel Signed-off-by: Vincent Hanquez --- tools/python/xen/xm/main.py | 29 +++++++++++++++++++++++++++-- xen/arch/x86/domain_build.c | 2 +- xen/common/kernel.c | 18 ++++++++++++++++++ xen/include/xen/init.h | 6 +++++- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 43e12e3892..6fe3535ff3 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -14,6 +14,31 @@ from xen.xend.XendClient import main as xend_client_main from xen.xm import create, destroy, migrate, shutdown, sysrq from xen.xm.opts import * +def unit(c): + if not c.isalpha(): + return 0 + base = 1 + if c == 'G' or c == 'g': base = 1024 * 1024 * 1024 + elif c == 'M' or c == 'm': base = 1024 * 1024 + elif c == 'K' or c == 'k': base = 1024 + else: + print 'ignoring unknown unit' + return base + +def int_unit(str, dest): + base = unit(str[-1]) + if not base: + return int(str) + + value = int(str[:-1]) + dst_base = unit(dest) + if dst_base == 0: + dst_base = 1 + if dst_base > base: + return value / (dst_base / base) + else: + return value * (base / dst_base) + class Group: name = "" @@ -475,7 +500,7 @@ class ProgMaxmem(Prog): def main(self, args): if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0]) dom = args[1] - mem = int(args[2]) + mem = int_unit(args[2], 'm') server.xend_domain_maxmem_set(dom, mem) xm.prog(ProgMaxmem) @@ -493,7 +518,7 @@ MEMORY_TARGET megabytes""" def main(self, args): if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0]) dom = args[1] - mem_target = int(args[2]) + mem_target = int_unit(args[2], 'm') server.xend_domain_mem_target_set(dom, mem_target) xm.prog(ProgBalloon) diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index b7c8156dfd..ff19962606 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -23,7 +23,7 @@ /* opt_dom0_mem: Kilobytes of memory allocated to domain 0. */ static unsigned int opt_dom0_mem = 0; -integer_param("dom0_mem", opt_dom0_mem); +integer_unit_param("dom0_mem", opt_dom0_mem); #if defined(__i386__) /* No ring-3 access in initial leaf page tables. */ diff --git a/xen/common/kernel.c b/xen/common/kernel.c index e27a10a76b..33122e9333 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -55,6 +55,24 @@ void cmdline_parse(char *cmdline) *(unsigned int *)param->var = simple_strtol(opt, (char **)&opt, 0); break; + case OPT_UINT_UNIT: + if ( opt != NULL ) + { + int base = 1; + unsigned int value; + + value = simple_strtoul(opt, (char **)&opt, 0); + if (*opt == 'G' || *opt == 'g') { + base = 1024 * 1024; + opt++; + } if (*opt == 'M' || *opt == 'm') { + base = 1024; + opt++; + } else if (*opt == 'K' || *opt == 'k') + opt++; + *(unsigned int *) param->var = value * base; + } + break; case OPT_BOOL: *(int *)param->var = 1; break; diff --git a/xen/include/xen/init.h b/xen/include/xen/init.h index 6df189f980..991abc6c24 100644 --- a/xen/include/xen/init.h +++ b/xen/include/xen/init.h @@ -59,7 +59,7 @@ extern initcall_t __initcall_start, __initcall_end; */ struct kernel_param { const char *name; - enum { OPT_STR, OPT_UINT, OPT_BOOL } type; + enum { OPT_STR, OPT_UINT, OPT_UINT_UNIT, OPT_BOOL } type; void *var; unsigned int len; }; @@ -74,6 +74,10 @@ extern struct kernel_param __setup_start, __setup_end; static char __setup_str_##_var[] __initdata = _name; \ static struct kernel_param __setup_##_var __attribute_used__ \ __initsetup = { __setup_str_##_var, OPT_UINT, &_var, sizeof(_var) } +#define integer_unit_param(_name, _var) \ + static char __setup_str_##_var[] __initdata = _name; \ + static struct kernel_param __setup_##_var __attribute_used__ \ + __initsetup = { __setup_str_##_var, OPT_UINT_UNIT, &_var, sizeof(_var) } #define string_param(_name, _var) \ static char __setup_str_##_var[] __initdata = _name; \ static struct kernel_param __setup_##_var __attribute_used__ \ -- 2.30.2